package thread;

public class Demo9 {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            //Thread内部有一个现成的标志位，可以用来判定当前的循环是否要结束
            while (!Thread.currentThread().isInterrupted()) {
                System.out.println("线程执行中");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    //这样设定就可以让程序员有更多的可操作空间, 根据异常来自己决定(前提是有sleep)
                    //1.假装没听见，循环继续执行
                    e.printStackTrace();
                    //2.让线程立即结束
                    break;
                }
            }
        });
        t1.start();
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //即使线程内部出现阻塞也是可以使用这个方法唤醒，是手动定义标志位无法实现的
        System.out.println("让t线程中止");
        t1.interrupt();
        //interrupt唤醒线程之后，此时sleep方法抛出异常，同时会自动清楚刚才设置的标志位，这样就是的设置标志位的效果没有生效一样
        //为啥这么设定？java是期望当线程”要中断“这样的信号的时候，他能够自由决定，接下来怎么处理
    }
}
